<?php
/**
 * User: zsj
 * Date: 2020/7/16
 * Time: 13:43
 */

namespace app\common\model;


use app\admin\library\Auth;
use think\Model;

class AdminLog extends Model
{
    protected $autoWriteTimestamp = 'datetime';

    //自定义日志标题
    protected static $title = '';
    //自定义日志内容
    protected static $content = '';

    protected static $adminConfig = [];

    public static function setTitle($title)
    {
        self::$title = $title;
    }

    public static function setContent($content)
    {
        self::$content = $content;
    }

    public static function record($title = '')
    {
        if (request()->method()) {
            $auth = Auth::instance();
            $adminId = $auth->isLogin() ? $auth->id : 0;
            $userName = $auth->isLogin() ? $auth->user_name : '未知';
            $content = self::$content;
            if (!$content) {
                $content = request()->param('', null, 'trim,strip_tags,htmlspecialchars');
                foreach ($content as $k => $v) {
                    if (is_string($v) && strlen($v) > 200 || stripos($k, 'password') !== false) {
                        unset($content[$k]);
                    }
                }
            }
            $title = self::$title;
            if (!$title) {
                $title = [];
                $path = strtolower(str_replace('.', '/', request()->controller() . '/' . request()->action()));
                $breadcrumb = Auth::instance()->getBreadcrumb($path);
                foreach ($breadcrumb as $k => $v) {
                    $title[] = $v['title'];
                }
                $title = implode(' ', $title);
            }
            self::create([
                'title'     => $title,
                'content'   => !is_scalar($content) ? json_encode($content) : $content,
                'url'       => substr(request()->url(), 0, 1500),
                'admin_id'  => $adminId,
                'user_name' => $userName,
                'useragent' => substr(request()->server('HTTP_USER_AGENT'), 0, 255),
                'ip'        => request()->ip()
            ]);
        }
    }
}